package leetcode; /**
 * description:
 * author:张腾
 * date:2021-06-12
 */

import java.util.ArrayDeque;

/**
 * 根据 逆波兰表示法，求表达式的值。
 * 有效的算符包括 +、-、*、/ 。每个运算对象可以是整数，也可以是另一个逆波兰表达式。
 */
public class leetcode150 {
    public int evalRPN(String[] tokens) {
        ArrayDeque<Integer> stack = new ArrayDeque<>();

        for (int i = 0; i < tokens.length; i++) {
            String token = tokens[i];
            Integer res;
            switch (token){
                case "*":{
                    Integer o1 = stack.pop();
                    Integer o2 = stack.pop();
                    res = o2*o1;
                    stack.push(res);
                }
                case "/":{
                    Integer o1 = stack.pop();
                    Integer o2 = stack.pop();
                    res = o2/o1;
                    stack.push(res);
                }
                case "+":{
                    Integer o1 = stack.pop();
                    Integer o2 = stack.pop();
                    res = o2+o1;
                    stack.push(res);
                }
                case "-":{
                    Integer o1 = stack.pop();
                    Integer o2 = stack.pop();
                    res = o2-o1;
                    stack.push(res);
                }
                default: stack.push(Integer.valueOf(token));
           }
        }
        return stack.pop();
    }
}
